package com.atlzk.common.utils;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.ObjectMetadata;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.UUID;

/**
导入依赖
<dependency>
	<groupId>com.aliyun.oss</groupId>
	<artifactId>aliyun-sdk-oss</artifactId>
	<version>2.8.3</version>
</dependency>
 * */

public class FileBlobUtil {

	// 阿里云API的内或外网域名
	private static String endpoint = "oss-cn-shanghai.aliyuncs.com";
	
	// 阿里云API的密钥Access Key ID
	private static String accessKeyId = "LTAI5tAPXomb6iXZwQ9fXYmo";
	
	// 阿里云API的密钥Access Key Secret
	private static String accessKeySecret = "c3mBKwfEjRGrqXOncQYa3Ztl8lmFAp";
	
	// 阿里云API的bucket名称
	private static String bucketName = "liu-bucket-a";

	
	/**
     * 功能描述: 文件上传
     **/
	public static String uploadFile(MultipartFile multipartFile)
	            throws OSSException, ClientException, FileNotFoundException {
		//生成一个新的文件名
		String objectKey = uuidFileName(multipartFile);
		// 创建OSSClient的实例
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, 			accessKeySecret);
	
	        // 上传的文件不是空，并且文件的名字不是空字符串
		if (multipartFile.getSize() != 0 && !"".equals(multipartFile.getName())) {
			ObjectMetadata om = new ObjectMetadata();
			om.setContentLength(multipartFile.getSize());
			// 设置文件上传到服务器的名称
			om.addUserMetadata("filename", objectKey);
			try {
				ossClient.putObject(bucketName, objectKey, new ByteArrayInputStream(multipartFile.getBytes()), om);
			} catch (IOException e) {
				e.printStackTrace();
			}finally {
				ossClient.shutdown();
			}
		}
		// 设置这个文件地址的有效时间
		DateUtil nowDate = new DateUtil(new Date());
		nowDate.addMonth(1);   //一个月后
		String url = ossClient.generatePresignedUrl(bucketName, objectKey, nowDate.toDate()).toString();
		return url;
	}

	/**
	 * 获取一个新的文件名
	 */
	private static String uuidFileName(MultipartFile file){
		//获取文件名称  a.txt.jpg
		String filename = file.getOriginalFilename();
		//得到一个uuid随机的字符串
		String uuid = UUID.randomUUID()+"";
		//uuid和文件的后缀名称拼接得到一个新的文件名称  aaaaa.jpg
		String newFileName = uuid+filename.substring(filename.lastIndexOf("."));

		//uuid和文件的后缀名称拼接得到一个新的文件名称
		return newFileName;
	}
}
